草庐IT

C++ 对和指针

全部标签

c++ - 数组指针的增量

我试图理解为什么以下C++代码无法编译intmain(){inta[10];int(*p)[10]=&a;int*q=static_cast(++p);}如果不是很明显,我尝试做的是使用指针算法找到指向数组末尾的指针。到目前为止,我的理解是p具有指向十个整数数组的类型指针,表达式++p也是如此。通常,我可以将一个int数组分配给一个指向int的指针类型的变量,但这在递增的指针++p上失败了。我第一次尝试不使用static_cast但那也没有用。 最佳答案 phastypepointertoarrayoftenints这是正确的。No

c++ - 创建指向没有默认构造函数的类的智能指针数组

我指的是question,我们可以创建一个std::unique_ptr数组到一个已经删除了默认构造函数的类,如下所示,如何传递string参数。#include#include#includeusingnamespacestd;classA{stringstr;public:A()=delete;A(string_str):str(_str){}stringgetStr(){returnstr;}};intmain(){unique_ptrptr=make_unique(3);unique_ptrarr[3]=make_unique(3);//Dosomethinghereretur

c++ - 获取指向 vector 元素的指针

这个问题在这里已经有了答案:Doesinsertionofelementsinavectordamagesapointertothevector?(6个答案)doesapointertoanelementofavectorremainafteraddingtoorremovingfromthevector(inc++)(1个回答)关闭5年前。我遇到了一个我不太明白的问题:我正在用创建一个对象Edgeedge_vec1.push_back(Edge(src,dest));然后我想在一个单独的vector中保留一个指向这条边的指针:edge_vec2.push_back(&edge_vec

c++ - 调用对象类型 'void (B::*)(int)' 不是函数或函数指针

我正在尝试将方法作为函数参数传递。这是一个简化的示例,它返回一个我不理解的编译错误classB{private:intj;public:voidfoo(inti){std::coutj编译时用g++-std=c++11b.cpp-ob我明白了b.cpp:22:50:error:calledobjecttype'void(B::*)(int)'isnotafunctionorfunctionpointervoidcall(void(B::*fun)(inti),inti){b.*fun(i);}~~~^b.cpp:31:12:error:calltonon-staticmemberfun

c++ - 为什么智能指针 vector 不是指向实现与该接口(interface)协变的接口(interface)的项目?

为什么智能指针vector不与item实现的接口(interface)协变?例如如果我有一个指向狗的指针vector,为什么我不能将它用作指向iAnimal的指针vector?#include#include#include#includestructiAnimal{virtualstd::stringspeak()const=0;};structiMammal:publiciAnimal{virtualstd::stringspeak()const=0;virtualintlegs()const=0;};structDog:publiciMammal{std::stringspeak

c++ - 如何声明一个常量的方法指针

1st这不是关于如何指向常量方法的问题。我想知道如何使我的方法指针保持不变。给定:structfoo{voidfunc1();voidfunc2();};我可以用void(foo::*bar)()=&foo::func1构造一个方法指针但是我以后可以做bar=&foo.func2我想阻止它。我可以使用constautobar=&foo::func1轻松做到这一点,但我不确定如何在c++11之前做到这一点. 最佳答案 您所要做的就是在*之后添加const关键字,如下所示:void(foo::*const_pointer)()=&foo

c++ - 如何在不在 C++ 中创建函数对象的情况下将函数指针作为模板值参数传递?

我在这里看到过这个问题的许多变体,但我仍然觉得我的具体情况有所不同。我的目标是包装一个如下所示的CAPI:TF_Buffer*buf=TF_AllocateBuffer();//...TF_DeleteBuffer(buf);因为我有很多这样的对象,所以我想创建一个名为handle的通用类型,它可以保存给定的指针并在销毁时调用适当的释放器。我想象的用例是classbuffer:publichandle{public:buffer(TF_Buffer*b):handle(b){}}不幸的是,我无法让它工作,因为TF_DeleteBuffer是一个简单的函数(类型为voidTF_Delet

c++ - 如何传递唯一指针

我有一个容器类,它有一个数据成员。std::vector>Functions;这就是我为vector增加值(value)的方式。MaxSize是Sum_Function的子项。voidWavefrontRenderer::AddMaxSize(){Containercont;std::unique_ptrptrMaxSize=std::make_unique();cont.AddFunction(ptrMaxSize);}这是Container类中Function的定义。voidContainer::AddFunction(std::unique_ptr&func){std::uniq

c++ - 不能使用指针作为默认模板参数

我正在尝试使用默认原始指针作为默认模板参数。我读到非类型模板参数仅限于整数类型、枚举、指针和引用。对于引用,我没有遇到任何问题,但是当我尝试使用指针时,我遇到了这样的错误:error:non-typetemplateargumentoftype'Engine*'isnotaconstantexpression.这是我的代码:#include#includeusingstd::cout;usingstd::endl;classEngine{public:voidstartEngine(){m_started=true;coutclassCar{public:explicitCar(con

c++ - 将 RAII 与字符指针一起使用

我看到很多RAII示例类环绕文件句柄。我曾尝试将这些示例改编为字符指针,但运气不佳。我正在使用的库具有获取字符指针地址的函数(声明为get_me_a_string(char**x))。这些函数为该字符指针分配内存,并留给库的最终用户在他们自己的代码中清理它。所以,我的代码看起来像这样......char*a=NULL;char*b=NULL;char*c=NULL;get_me_a_string(&a);if(a==NULL){return;}get_me_a_beer(&b);if(b==NULL){if(a!=NULL){free(a);}return;}get_me_someth